﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Net.Http;
using System.Text;
using System.Windows.Forms;

namespace Mes.质检管理.InspectionModel
{
    public partial class InspectionAdd : Form
    {
        public InspectionAdd()
        {
            InitializeComponent();
            InitializeForm();
        }

        /// <summary>
        /// 窗体初始化：
        /// 1) 设置默认下拉选中项；
        /// 2) 自动生成项目编号（XM+5位随机数）；
        /// 3) 绑定“保存/取消”按钮点击事件。
        /// </summary>
        /// <remarks>这是新增页面进入时最先执行的自定义初始化逻辑。</remarks>
        private void InitializeForm()
        {
            // 设置默认值
            cboInspectionType.SelectedIndex = 0;

            // 自动生成项目编号
            txtInspectionItemNo.Text = GenerateItemNo();

            // 绑定事件
            btnSave.Click += BtnSave_Click;
            btnCancel.Click += BtnCancel_Click;
        }

        /// <summary>
        /// 生成项目编号，格式：XM + 5位随机数字（范围 10000-99999）。
        /// </summary>
        /// <returns>形如 "XM12345" 的字符串。</returns>
        private string GenerateItemNo()
        {
            // 生成5位随机数字
            Random random = new Random();
            int randomNumber = random.Next(10000, 100000); // 生成10000-99999之间的随机数

            // 返回XM+5位随机数字的格式
            return "XM" + randomNumber.ToString();
        }

        /// <summary>
        /// 备用的保存按钮事件（未在设计器绑定）。
        /// 仅做最简必填校验与“保存成功”提示，示例用途。
        /// </summary>
        private void BtnSave_Click(object sender, EventArgs e)
        {
            // 验证必填字段
            if (string.IsNullOrEmpty(txtInspectionItemName.Text.Trim()))
            {
                MessageBox.Show("请输入质检项目名称！", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                txtInspectionItemName.Focus();
                return;
            }

            if (string.IsNullOrEmpty(txtInspectionItemNo.Text.Trim()))
            {
                MessageBox.Show("请输入质检项目编号！", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                txtInspectionItemNo.Focus();
                return;
            }

            //// 这里可以添加保存逻辑
            //MessageBox.Show("保存成功！", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            //this.DialogResult = DialogResult.OK;
            this.Close();
        }

        /// <summary>
        /// 取消并关闭当前窗口。
        /// </summary>
        private void BtnCancel_Click(object sender, EventArgs e)
        {
            this.DialogResult = DialogResult.Cancel;
            this.Close();
        }

        // 获取输入的数据 -----------------------------------------------------------------

        /// <summary>获取质检项目名称。</summary>
        public string GetInspectionItemName()
        {
            return txtInspectionItemName.Text.Trim();
        }

        /// <summary>获取质检项目编号。</summary>
        public string GetInspectionItemNo()
        {
            return txtInspectionItemNo.Text.Trim();
        }

        /// <summary>获取质检方法。</summary>
        public string GetInspectionMethod()
        {
            return txtInspectionMethod.Text.Trim();
        }

        /// <summary>获取质检工具。</summary>
        public string GetInspectionTool()
        {
            return txtInspectionTool.Text.Trim();
        }

        /// <summary>
        /// 获取质检类型（返回数字字符串）。
        /// 数值=1，外观=2，质量=3。
        /// </summary>
        public string GetInspectionType()
        {
            string selectedType = cboInspectionType.SelectedItem?.ToString() ?? "";

            // 将质检类型映射为对应的数字
            switch (selectedType)
            {
                case "数值":
                    return "1";
                case "外观":
                    return "2";
                case "质量":
                    return "3";
                default:
                    return "1"; // 默认返回1
            }
        }

        /// <summary>获取质检类型中文显示文本。</summary>
        public string GetInspectionTypeText()
        {
            return cboInspectionType.SelectedItem?.ToString() ?? "数值";
        }

        /// <summary>获取标准值。</summary>
        public string GetStandardValue()
        {
            return txtStandardValue.Text.Trim();
        }

        /// <summary>获取备注。</summary>
        public string GetRemarks()
        {
            return txtRemarks.Text.Trim();
        }

        /// <summary>
        /// 保存按钮事件（设计器已绑定到此方法）。
        /// 先做最简必填校验，然后调用 <see cref="AddToDatabase"/> 与后端交互。
        /// </summary>
        private void btnSave_Click_1(object sender, EventArgs e)
        {
            try
            {
                // 验证必填字段
                if (string.IsNullOrEmpty(txtInspectionItemName.Text.Trim()))
                {
                    MessageBox.Show("请输入质检项目名称！", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    txtInspectionItemName.Focus();
                    return;
                }

                if (string.IsNullOrEmpty(txtInspectionItemNo.Text.Trim()))
                {
                    MessageBox.Show("请输入质检项目编号！", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    txtInspectionItemNo.Focus();
                    return;
                }

                // 调用API添加数据
                bool success = AddToDatabase();

                if (success)
                {
                    MessageBox.Show("添加成功！", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    this.DialogResult = DialogResult.OK;
                    this.Close();
                }
                else
                {
                    MessageBox.Show("添加失败！", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show($"添加过程中发生错误：{ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        /// <summary>
        /// 调用后端接口执行新增（HTTP POST）。
        /// 接口返回 200 或 201 视为成功。
        /// </summary>
        /// <remarks>URL: https://localhost:7149/api/Inspection/AddInspection</remarks>
        private bool AddToDatabase()
        {
            try
            {
                // 构建JSON数据
                string jsonData = BuildJsonData();
                
                // 使用HttpClient直接调用接口
                using (var httpClient = new HttpClient())
                {
                    // 设置超时时间
                    httpClient.Timeout = TimeSpan.FromSeconds(30);
                    
                    // 创建请求内容
                    var content = new StringContent(jsonData, Encoding.UTF8, "application/json");
                    
                    // 发送POST请求
                    var response = httpClient.PostAsync(HttpClientHelper.GetApiUrl("/api/Inspection/AddInspection"), content).Result;
                    
                    // 检查响应状态
                    return response.IsSuccessStatusCode;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show($"网络请求错误：{ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return false;
            }
        }

        /// <summary>
        /// 构建提交到后端的 JSON 文本。
        /// 字段名需与后端模型一致，InspectionType 为数字(1/2/3)。
        /// </summary>
        private string BuildJsonData()
        {
            // 构建简单的JSON字符串
            System.Text.StringBuilder json = new System.Text.StringBuilder();
            json.Append("{");
            json.AppendFormat("\"InspectionItemName\":\"{0}\",", txtInspectionItemName.Text.Trim());
            json.AppendFormat("\"InspectionItemNo\":\"{0}\",", txtInspectionItemNo.Text.Trim());
            json.AppendFormat("\"InspectionMethod\":\"{0}\",", txtInspectionMethod.Text.Trim());
            json.AppendFormat("\"InspectionTool\":\"{0}\",", txtInspectionTool.Text.Trim());
            json.AppendFormat("\"InspectionType\":{0},", GetInspectionType());
            json.AppendFormat("\"StandardValue\":\"{0}\",", txtStandardValue.Text.Trim());
            json.AppendFormat("\"Remarks\":\"{0}\"", txtRemarks.Text.Trim());
            json.Append("}");
            return json.ToString();
        }
    }
}
